package cn.xiaolang.function.file_manage.io;

import java.io.*;

/**
 * 文件读写入门示例
 *
 * @author Dean
 * @date 2023/4/13
 */
public class FileWriterAndReaderStarted {

    public static void main(String[] args) throws IOException {
        String pathname = "/Users/mac/Desktop/application-app/personal-repo/rangers_collect_practice/src/main/resources/1.txt";
        readFile(pathname);
        writeFile("output.txt", "Hello world!");
    }

    /**
     * 读文件
     * 1.防止文件建立或读取失败，用catch捕捉错误并打印，也可以throw;
     * 2.不关闭文件会导致资源的泄露，读写文件都同理。示例：基于ARM块(Automatic Resource Management) ，自动资源管理。
     * 3.建立一个对象，它把文件内容转成计算机能读懂的语言
     *
     * @param fileWithPath 绝对路径或相对路径都可以，写入文件时演示相对路径,读取以上路径的input.txt文件
     */
    public static void readFile(String fileWithPath) {
        try (FileReader reader = new FileReader(fileWithPath);
             BufferedReader br = new BufferedReader(reader)) {
            String line;
            //网友推荐更加简洁的写法
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 写文件
     *
     * @param fileName 文件名
     */
    public static void writeFile(String fileName, String content) {
        try {
            // 相对路径，如果没有则要建立一个新的output.txt文件
            File writeName = new File(fileName);
            // 创建新文件,有同名的文件的话直接覆盖
            boolean newFile = writeName.createNewFile();
            if (!newFile) {
                return;
            }
            try (FileWriter writer = new FileWriter(writeName);
                 BufferedWriter out = new BufferedWriter(writer)) {
                out.write(content + "\r\n");
                // 把缓存区内容压入文件
                out.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}